﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Platform.ObjectModel.Serializers
{
	public sealed class TokenStreamer : DataObjectStreamer
	{
		public TokenStreamer()
			: base( Globals.Formatters.Token )
		{ }

		public override byte[] ToStream( object value )
		{
			if ( value == null )
				return null;

			if ( value is DocumentToken )
				return Encoding.Default.GetBytes( ( ( DocumentToken )value ).Value );
			else
				throw new InvalidOperationException( String.Format( "O objeto do tipo \"{0}\" não pode ser serializado com um Token.", value.GetType().FullName ) );
		}

		public override object FromStream( Type valueType, byte[] stream )
		{
			if ( stream == null || stream.Length == 0 )
				return null;

			if ( !valueType.Equals( typeof( DocumentToken ) ) )
				throw new InvalidOperationException( "Não foi possível realizar a deserialização do Token." );

			return new DocumentToken( Encoding.Default.GetString( stream ) );
		}
	}
}
